package com.easygem.common.response;

import org.springframework.http.HttpStatus;


/**
 * @author 罗力
 * @version 1.0
 * @className ResponseMessage
 * @description TODO 统一响应类型数据
 * @date 2024/12/12 16:44
 */
public class ResponseMessage<T>{

    private Integer code;//响应码
    private Boolean success;//是否成功
    private String message;//响应信息
    private T data;//响应数据

    public ResponseMessage(Integer code, Boolean success, String message, T data) {
        this.code = code;
        this.success = success;
        this.message = message;
        this.data = data;
    }

    /**
     * 成功响应方法
     * @return 统一响应类型数据对象
     * @param <T> 泛型数据
     */
    public static <T> ResponseMessage<T> success() {
        return new ResponseMessage<T>(HttpStatus.OK.value(), true, "操作成功", null);
    }

    /**
     * 成功响应方法
     * @return 统一响应类型数据对象
     * @param <T> 泛型数据
     */
    public static <T> ResponseMessage<T> success(String message) {
        return new ResponseMessage<T>(HttpStatus.OK.value(), true, message, null);
    }

    /**
     * 成功响应方法
     * @param data 返回数据
     * @return 统一响应类型数据对象
     * @param <T> 泛型数据
     */
    public static <T> ResponseMessage<T> success(T data) {
        return new ResponseMessage<T>(HttpStatus.OK.value(), true, "操作成功", data);
    }
    /**
     * 成功响应方法
     * @param data 返回数据
     * @param message 提醒信息
     * @return 统一响应类型数据对象
     * @param <T> 泛型数据
     */
    public static <T> ResponseMessage<T> success(String message,T data) {
        return new ResponseMessage<T>(HttpStatus.OK.value(), true, message, data);
    }

    /**
     * 成功响应方法
     * @param message 提醒信息
     * @param data 返回数据
     * @return 统一响应类型数据对象
     * @param <T> 泛型数据
     */
    public static <T> ResponseMessage<T> success(T data,String message) {
        return new ResponseMessage<T>(HttpStatus.OK.value(), true, message, data);
    }

    /**
     * 异常响应方法
     * @return  统一响应类型数据对象
     * @param <T> 泛型数据
     */
    public static <T> ResponseMessage<T> error() {
        return new ResponseMessage<T>(500, false, "发生异常", null);
    }

    /**
     * 异常响应方法
     * @param message 提醒信息
     * @return  统一响应类型数据对象
     * @param <T> 泛型数据
     */
    public static <T> ResponseMessage<T> error(String message) {
        return new ResponseMessage<T>(500, false, message, null);
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public Boolean getSuccess() {
        return success;
    }

    public void setSuccess(Boolean success) {
        this.success = success;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}
